from typing import Union, Optional

from fastapi import Query
from pydantic import BaseModel, Field

from like.schema_base import EmptyStrToNone


class MedicalOperationClassificationVersion30ListIn(BaseModel):
    """用于存储手术操作分类国家临床版3.0信息的列表参数"""
    id: Union[int, None, EmptyStrToNone] = Query()  # 主键ID，用于唯一标识每条记录
    code: Union[str, None, EmptyStrToNone] = Query()  # 手术操作编码，用于唯一标识该手术操作
    name: Union[str, None, EmptyStrToNone] = Query()  # 手术操作的具体名称
    category: Union[str, None, EmptyStrToNone] = Query()  # 手术操作所属的类别
    input_options: Union[str, None, EmptyStrToNone] = Query()  # 与该手术操作相关的录入选项信息
    create_time: Union[int, None, EmptyStrToNone] = Query()  # 记录创建时间，为13位长整型的毫秒时间戳
    update_time: Union[int, None, EmptyStrToNone] = Query()  # 记录更新时间，为13位长整型的毫秒时间戳


class MedicalOperationClassificationVersion30ExportIn(MedicalOperationClassificationVersion30ListIn):  
    """用于存储手术操作分类国家临床版3.0信息的导出参数"""
    export: Union[int, None] = Query()  # 导出模式
    page_start: Optional[int] = None    # 导出起始页
    page_end: Optional[int] = None      # 导出结束页
    page_size: int = Query()            # 每页数量
    file_name: Optional[str] = None     # 导出文件名    


class MedicalOperationClassificationVersion30DetailIn(BaseModel):
    """用于存储手术操作分类国家临床版3.0信息的详情参数"""
    id: int = Query(gt=0)  # 主键ID，用于唯一标识每条记录


class MedicalOperationClassificationVersion30AddIn(BaseModel):
    """用于存储手术操作分类国家临床版3.0信息的新增参数"""
    code: str  # 手术操作编码，用于唯一标识该手术操作
    name: str  # 手术操作的具体名称
    category: str  # 手术操作所属的类别
    input_options: str  # 与该手术操作相关的录入选项信息


class MedicalOperationClassificationVersion30EditIn(BaseModel):
    """用于存储手术操作分类国家临床版3.0信息的编辑参数"""
    code: str  # 手术操作编码，用于唯一标识该手术操作
    name: str  # 手术操作的具体名称
    category: str  # 手术操作所属的类别
    input_options: str  # 与该手术操作相关的录入选项信息


class MedicalOperationClassificationVersion30DelIn(BaseModel):
    """用于存储手术操作分类国家临床版3.0信息的删除参数"""
    id: int = Field(gt=0)  # 主键ID，用于唯一标识每条记录


class MedicalOperationClassificationVersion30Out(BaseModel):
    """用于存储手术操作分类国家临床版3.0信息的返回信息"""
    id: Optional[int]  # 主键ID，用于唯一标识每条记录
    code: str  # 手术操作编码，用于唯一标识该手术操作
    name: str  # 手术操作的具体名称
    category: str  # 手术操作所属的类别
    input_options: str  # 与该手术操作相关的录入选项信息
    create_time: Optional[int]  # 记录创建时间，为13位长整型的毫秒时间戳
    update_time: Optional[int]  # 记录更新时间，为13位长整型的毫秒时间戳

    class Config:
        orm_mode = True
